package org.openzip.openzip.gui.util;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

public class JarAdapter extends File {

	public JarAdapter() {
		super(System.getProperty("user.dir"));
		loadFiles();
	}

	public String getName() {
		return "root";
	}

	public File[] listFiles() {
		return rootDir.listFiles();
	}

	private Enumeration entries = null;
	private MyJarFile rootDir;

	private void loadFiles() {
		String jarFileName = JarAdapter.class.getProtectionDomain()
				.getCodeSource().getLocation().getFile();

		// TODO tento radek odstranit pokud to chci testovat na skutecnem jaru
		jarFileName = "C:\\openzip\\out.jar";

		JarFile jarFile = null;
		try {
			jarFile = new JarFile(jarFileName);
			entries = jarFile.entries();
		} catch (Exception e) {
			e.printStackTrace();
		}

		// TODO pozor funguje to jenom na setridene entries !!
		// toto lze osetrit, tak ze se to pri vytvareni jaru setridi
		// nebo to muzu setridit nekde tady
		// printEntries();
		rootDir = new MyJarFile(null);
		loadFiles(rootDir);

	}

	// el recursivo load
	private void loadFiles(MyJarFile dir) {
		while (entries.hasMoreElements()) {

			JarEntry jarEntry = (JarEntry) entries.nextElement();
			if (jarEntry.getName().startsWith("data/")) {
				System.out.println("dir: " + dir.getEntryPath()
						+ " >> jarEntry: " + jarEntry.getName());

				MyJarFile jarFile = new MyJarFile(jarEntry);
				dir.addJarFile(jarFile);
				if (jarEntry.isDirectory()) {
					loadFiles(jarFile);
				}
			}

		}
	}

	private void printEntries() {
		while (entries.hasMoreElements()) {

			JarEntry jarEntry = (JarEntry) entries.nextElement();
			if (jarEntry.getName().startsWith("data/")) {
				System.out.println("JAR Entry: " + jarEntry.getName());
			}

		}

	}
}
